/**
 * 构造N*N的01矩阵，使得：
 * 1. 恰好有K个1
 * 2. 每一行1的数量的奇偶性相同
 * 3.每一列1的数量的奇偶性相同
 * 保证N是偶数
 * K如果是奇数显然不可行
 * 假设K是4的倍数，则做一个2*2的正方形，放满1，可以保证行列性质
 * 然后放K/4个小正方形即可
 * 如果K模4得2，则需要考虑剩下的2个，剩下的2个显然不能满足条件，除非N==2
 * 需要K至少为6，令K=6+4m，则6个1可以排在3*3的正方形中
 * 1 1 0
 * 1 0 1
 * 0 1 1
 * 然后再将剩下的1填入m个小正方形即可
 * 注意到这种填法要求0的数量至少是3个。
 * 所以如果K == N*N - 2，则不可行
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;

using llt = long long;
using pii = pair<int, int>;
using vi = vector<int>;
using vvi = vector<vi>;

int N, K;
vvi Ans;

void proc4(){
    int c = K / 4;
    Ans.assign(N, vi(N, 0));
    for(int i=1;i<N;i+=2){
        for(int j=1;j<N;j+=2){
            if(0 == c) return;
            Ans[i - 1][j - 1] = Ans[i][j - 1] = Ans[i - 1][j] = Ans[i][j] = 1;
            --c;
        }
    }
}

void proc6(){
    Ans.assign(N, vi(N, 1));
    Ans[1][1] = Ans[1][3] = Ans[2][0] = 0;
    Ans[2][3] = Ans[3][0] = Ans[3][1] = 0;
    return;
}

void proc2(){
    Ans.assign(N, vi(N, 0));
    Ans[0][N - 3] = Ans[0][N - 2] = 1;
    Ans[1][N - 3] = Ans[1][N - 1] = 1;
    Ans[2][N - 1] = Ans[2][N - 2] = 1;
    int c = (K - 6) / 4;
    for(int i=1;i<N;i+=2){
        for(int j=1;j<N;j+=2){
            if((i == 1 or i == 3) and j>=N-3) break;
            if(0 == c) return;
            Ans[i - 1][j - 1] = Ans[i - 1][j] = 1;
            Ans[i][j - 1] = Ans[i][j] = 1;
            --c;
        }
    }
    return;
}

void proc(){
    if(K & 1) return (void)(cout << "No\n");
    if(2 == K or N * N - 2 == K){
        if(N != 2) return (void)(cout << "No\n");
        cout << "Yes\n1 0\n0 1\n";
        return;
    }
    if(K % 4 == 0) proc4();
    else if(N * N - 6 == K) proc6();
    else proc2();
    cout << "Yes\n";
    for(const auto & a : Ans){
        for(auto i : a) cout << i << " ";
        cout << "\n";
    }
    return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    int nofkase = 1;
    cin >> nofkase;
    while(nofkase--){
        cin >> N >> K;
        proc();
    }
    return 0;
}